<?php

/*
 */

class NivelServicioComponent extends Object {
    var $Obra;
    var $Estado;
    var $Nivele;
    var $ElementosInfraestructura;
    var $ElementosSenializacione;
    var $ElementosSuperestructura;

    function save($id_obra = null) {

        app::import('Model','Obra');
        $this->Obra = new Obra();

        app::import('Model','Estado');
        $this->Estado = new Estado();

        app::import('Model','Nivele');
        $this->Nivele = new Nivele();

        app::import('Model','ElementosInfraestructura');
        $this->ElementosInfraestructura = new ElementosInfraestructura();

        app::import('Model','ElementosSenializacione');
        $this->ElementosSenializacione = new ElementosSenializacione();

        app::import('Model','ElementosSuperestructura');
        $this->ElementosSuperestructura = new ElementosSuperestructura();


        $sum_estados = 0;
        if (!empty($id_obra)) {
            $cant_elem_superestructura = $this->ElementosSuperestructura->find('count', array('conditions' => array('ElementosSuperestructura.obra_id' => $id_obra)));
            if (!empty($cant_elem_superestructura)) {
                $superestructuras = $this->ElementosSuperestructura->find('all', array('conditions' => array('ElementosSuperestructura.obra_id' => $id_obra)));
                foreach ($superestructuras as $superestructura) {
                    $estado = $this->Estado->findById($superestructura['ElementosSuperestructura']['estado_id']);
                    $sum_estados += $estado['Estado']['ponderacion'];
                }
            }

            $cant_elem_infraestructura = $this->ElementosInfraestructura->find('count', array('conditions' => array('ElementosInfraestructura.obra_id' => $id_obra)));
            if (!empty($cant_elem_infraestructura)) {
                $infraestructuras = $this->ElementosInfraestructura->find('all', array('conditions' => array('ElementosInfraestructura.obra_id' => $id_obra)));
                foreach ($infraestructuras as $infraestructura) {
                    $estado = $this->Estado->findById($infraestructura['ElementosInfraestructura']['estado_id']);
                    $sum_estados += $estado['Estado']['ponderacion'];
                }
            }

            $cant_elem_senializacione = $this->ElementosSenializacione->find('count', array('conditions' => array('ElementosSenializacione.obra_id' => $id_obra)));
            if (!empty($cant_elem_senializacione)) {
                $senializaciones = $this->ElementosSenializacione->find('all', array('conditions' => array('ElementosSenializacione.obra_id' => $id_obra)));
                foreach ($senializaciones as $senializacione) {
                    $estado = $this->Estado->findById($senializacione['ElementosSenializacione']['estado_id']);
                    $sum_estados += $estado['Estado']['ponderacion'];
                }
            }
            $total_elementos = $cant_elem_superestructura + $cant_elem_infraestructura + $cant_elem_senializacione;

            if (!empty($cant_elem_superestructura) || !empty($cant_elem_infraestructura) || !empty($cant_elem_senializacione)) {
                $indice_estado = $sum_estados / $total_elementos;
                $nivel = $this->Nivele->find('all', array('recursive' => -1, 'conditions' => array('Nivele.minimo <=' => $indice_estado, 'Nivele.maximo >' => $indice_estado)));
                $nivel_servicio = (!empty($nivel)) ? $nivel[0]['Nivele']['id'] : 0;

                $this->Obra->id = $id_obra;
                if ($this->Obra->saveField('nivele_id', $nivel_servicio)){
                    return true;
                }else{
                    return false;
                }
            } else {
                return false;
            }
        }
        return false;
    }

}
?>
